package requests

import (
	"app/common/customtype"
	"app/common/params"
	"database/sql/driver"

	"github.com/goccy/go-json"
	"github.com/shopspring/decimal"
)

type PlanAddRequest struct {
	MainType            int8                       `json:"mainType"`                                                //1-关键次 2二维码 3淘口令
	ShopName            string                     `json:"shopName" validate:"required" label:"店铺名称"`               //店铺名称
	ShopId              string                     `json:"shopId"`                                                  //店铺ID
	GoodsLink           string                     `json:"goodsLink" validate:"required" label:"商品链接"`              //商品链接
	GoodsId             int64                      `json:"goodsId"`                                                 //商品ID
	GoodsName           string                     `json:"goodsName" validate:"required" label:"商品标题"`              //商品标题
	IndexImg            string                     `json:"indexImg" validate:"required" label:"商品主图"`               //商品主图
	GoodsPrice          decimal.Decimal            `json:"goodsPrice" validate:"required" label:"商品展示价格"`           //商品展示价格
	Desc                string                     `json:"desc"`                                                    // 计划备注
	Location            string                     `json:"location"`                                                //发货地
	EndTime             customtype.LocalTime       `json:"endTime" validate:"required" label:"要求完成时间"`              //任务要求完成时间
	RootCatId           int                        `json:"rootCatId"`                                               //淘宝一级分类ID
	RootCatName         string                     `json:"rootCatName"`                                             //淘宝一级分类名称
	EPlatform           int8                       `json:"ePlatform" validate:"required"`                           //电商平台类型 1淘宝 2抖音 3京东 4瓶多多
	Sku                 []*SkuItem                 `json:"sku" validate:"required" label:"计划SKU"`                   //计划sku配置
	Sex                 int8                       `gorm:"column:sex" json:"sex"`                                   //性别要求: 0不限 1男 2女
	Priority            int8                       `gorm:"column:priority" json:"priority"`                         //是否优先做单 0否 1是
	IsFakeChat          int8                       `gorm:"column:is_fake_chat" json:"isFakeChat"`                   //是否需要假聊 0否 1是
	IsCollect           int8                       `gorm:"column:is_collect" json:"isCollect"`                      //是否收藏 0否 1是
	IsCart              int8                       `gorm:"column:is_cart" json:"isCart"`                            //是否加购物车: 0否 1是
	BackfillOrderNumber int8                       `gorm:"column:backfill_order_number" json:"backfillOrderNumber"` //是否填写订单编号: 0否 1是
	IsVerifyAccount     int8                       `gorm:"column:is_verify_account" json:"isVerifyAccount"`         //是否验号: 0否 1是
	TimeInterval        int8                       `gorm:"column:time_interval" json:"timeInterval"`                //定时发布任务: 0否 1是
	TimeIntervalSetting []*TimeIntervalSettingItem `gorm:"column:time_interval_setting" json:"timeIntervalSetting"` //定时发布配置
	Postage             float64                    `json:"postage" validate:"min:0"`                                //邮费
	TaskMoney           decimal.Decimal            `json:"taskMoney" validate:"-"`                                  //总本金
	Brokerage           decimal.Decimal            `json:"brokerage" validate:"-"`                                  //总佣金
	TaskNum             int                        `json:"taskNum" validate:"-"`                                    //总单量,自动计算
	PlanDraftsId        int64                      `json:"planDraftsId" `                                           //草稿箱id
}

type PlanEditRequest struct {
	Id int64 `json:"id" validate:"required" label:"计划ID"` //计划ID
	PlanAddRequest
}

type PlanSkuEditRequest struct {
	Id  int64      `json:"id" validate:"required" label:"计划ID"`   //计划ID
	Sku []*SkuItem `json:"sku" validate:"required" label:"计划SKU"` //计划sku配置
}

type PlanDelRequest struct {
	Id int64 `json:"id" validate:"required" label:"计划ID"` //计划ID
}

type TimeIntervalSettingItem struct {
	// Start string `json:"start" validate:"required_if_custom|TimeInterval,1" message:"定时发布任务：开始时间未设置"` //开始时分: 23:01
	Start customtype.LocalTime `json:"start" message:"定时发布任务：开始时间未设置"` //开始时分: 2023-05-17 13:04:00
	M     int                  `json:"m"  message:"定时发布任务：间隔时间未设置"`    //间隔分钟
	Num   int                  `json:"num" message:"定时发布任务：发布单量未设置"`   //发布几单
}

type SkuItem struct {
	Main       string          `json:"main" validate:"required" label:"主信息"`             //主信息
	BuyNumber  int             `json:"buyNumber" validate:"required|min:1" label:"拍下件数"` //拍下件数
	SkuInfo    string          `json:"skuInfo" validate:"required" label:"拍下规格"`         //拍下规格
	TaskNumber int             `json:"taskNumber" validate:"required|min:1" label:"单量"`  //任务单量
	RealPrice  decimal.Decimal `json:"realPrice" validate:"required"`                    //实付款
	Yj         decimal.Decimal `json:"yj"`                                               //自动计算, 总佣金
	YjSetting  decimal.Decimal `json:"yjSettings"`                                       //根据佣金配置获取
	TotalPrice decimal.Decimal `json:"totalPrice"`                                       //自动计算, 货佣小记
}

func (m *SkuItem) Scan(v string) error {
	if v == "" || v == "\"\"" {
		return nil
	}
	return json.Unmarshal([]byte(v), m)
}

func (m *SkuItem) Value() (driver.Value, error) {
	str, _ := json.Marshal(m)
	return str, nil
}

type PlanCalcYjRequest struct {
	RealPrice  decimal.Decimal `json:"realPrice" validate:"required"`                     //实付款
	EPlatform  int8            `json:"ePlatform" validate:"required"`                     //电商平台类型 1淘宝 2抖音 3京东 4瓶多多
	TaskNumber int             `json:"taskNumber" validate:"required|min:1" label:"任务单量"` //任务单量
}

type PlanListRequest struct {
	SupplierId   int64  `json:"supplierId" form:"supplierId"`
	AgentId      int64  `json:"agentId" form:"agentId"`
	EndStartTime string `json:"endStartTime" form:"endStartTime"` //完成任务开始时间
	EndEndTime   string `json:"endEndTime" form:"endEndTime"`     //完成任务结束时间
	Status       int8   `json:"status" form:"status"`             //任务状态: 1-审核通过，2-取消，3-审核不通过 4-任务进行中，5-任务已完成,6-待审核
	TaskNumMin   int    `json:"taskNumMin" form:"taskNumMin"`     //最小单量
	TaskNumMax   int    `json:"taskNumMax" form:"taskNumMax"`     //最大单量
	SupplierName string `json:"supplierName" form:"supplierName"` //商家名称
	ShopAccount  string `json:"shopAccount" form:"shopAccount"`   //商家账号
	ShopName     string `json:"shopName" form:"shopName"`         //店铺名称
	GoodsName    string `json:"goodsName" form:"goodsName"`       //商品标题
	EPlatform    int8   `json:"ePlatform" form:"ePlatform"`       //平台
	Id           int64  `json:"id" form:"id"`                     //编号
	params.ParamsPagination
}

type PlanListDownloadRequest struct {
	SupplierId   int64  `json:"supplierId" form:"supplierId"`
	AgentId      int64  `json:"agentId" form:"agentId"`
	EndStartTime string `json:"endStartTime" form:"endStartTime"` //完成任务开始时间
	EndEndTime   string `json:"endEndTime" form:"endEndTime"`     //完成任务结束时间
	Status       int8   `json:"status" form:"status"`             //任务状态: 1-审核通过，2-取消，3-审核不通过 4-任务进行中，5-任务已完成,6-待审核
	TaskNumMin   int    `json:"taskNumMin" form:"taskNumMin"`     //最小单量
	TaskNumMax   int    `json:"taskNumMax" form:"taskNumMax"`     //最大单量
	SupplierName string `json:"supplierName" form:"supplierName"` //商家名称
	ShopAccount  string `json:"shopAccount" form:"shopAccount"`   //商家账号
	ShopName     string `json:"shopName" form:"shopName"`         //店铺名称
	GoodsName    string `json:"goodsName" form:"goodsName"`       //商品标题
	EPlatform    int8   `json:"ePlatform" form:"ePlatform"`       //平台
	Id           int64  `json:"id" form:"id"`                     //编号
}

type PlanCheckRequest struct {
	Id          int64  `json:"id" validate:"required" label:"计划编号"`                      //计划编号
	Status      int8   `json:"status" validate:"in:1,3" message:"审核结果值不合法" label:"审核结果"` //审核结果: 1-审核通过,3-审核不通过
	CheckRemark string `json:"check_remark" message:"审核不通过时备注必填" label:"备注"`             //备注
}

type CheckTaskRequest struct {
	Id          int64  `json:"id" validate:"required" label:"计划编号"`                      //任务编号
	Status      int8   `json:"status" validate:"in:1,3" message:"审核结果值不合法" label:"审核结果"` //审核结果: 1-审核通过,3-审核不通过
	CheckRemark string `json:"check_remark" message:"审核不通过时备注必填" label:"备注"`             //备注
}

type ThirduserListReq struct {
	params.ParamsPagination
	IsCheck int8 `json:"isCheck" form:"isCheck" label:"是否可以复购"` //是否可以复购
	TaskId  int  `json:"taskId" form:"taskId"  label:"任务id"`
}

type PlanCancelRequest struct {
	PlanId int64  `json:"planId" validate:"required" label:"计划ID"` //计划ID
	Remark string `json:"remark"`                                  //备注
}
type PlanDraftsDetailRequest struct {
	Id int64 `json:"id" validate:"required" label:"ID"` //ID
}

type PlanDraftsDelRequest struct {
	PlanDraftsId int64 `json:"planDraftsId" validate:"required" label:"ID"` //ID
}

type PlanDraftsAddRequest struct {
	MainType            int8                       `json:"mainType"`                                                //1-关键次 2二维码 3淘口令
	ShopName            string                     `json:"shopName" label:"店铺名称"`                                   //店铺名称
	ShopId              string                     `json:"shopId"`                                                  //店铺ID
	GoodsLink           string                     `json:"goodsLink"  label:"商品链接"`                                 //商品链接
	GoodsId             int64                      `json:"goodsId"`                                                 //商品ID
	GoodsName           string                     `json:"goodsName"  label:"商品标题"`                                 //商品标题
	IndexImg            string                     `json:"indexImg"  label:"商品主图"`                                  //商品主图
	GoodsPrice          decimal.Decimal            `json:"goodsPrice" label:"商品展示价格"`                               //商品展示价格
	Desc                string                     `json:"desc"`                                                    // 计划备注
	Location            string                     `json:"location"`                                                //发货地
	EndTime             customtype.LocalTime       `json:"endTime"  label:"要求完成时间"`                                 //任务要求完成时间
	RootCatId           int                        `json:"rootCatId"`                                               //淘宝一级分类ID
	RootCatName         string                     `json:"rootCatName"`                                             //淘宝一级分类名称
	EPlatform           int8                       `json:"ePlatform"`                                               //电商平台类型 1淘宝 2抖音 3京东 4瓶多多
	Sku                 []*SkuItem                 `json:"sku"  label:"计划SKU"`                                      //计划sku配置
	Sex                 int8                       `gorm:"column:sex" json:"sex"`                                   //性别要求: 0不限 1男 2女
	Priority            int8                       `gorm:"column:priority" json:"priority"`                         //是否优先做单 0否 1是
	IsFakeChat          int8                       `gorm:"column:is_fake_chat" json:"isFakeChat"`                   //是否需要假聊 0否 1是
	IsCollect           int8                       `gorm:"column:is_collect" json:"isCollect"`                      //是否收藏 0否 1是
	IsCart              int8                       `gorm:"column:is_cart" json:"isCart"`                            //是否加购物车: 0否 1是
	BackfillOrderNumber int8                       `gorm:"column:backfill_order_number" json:"backfillOrderNumber"` //是否填写订单编号: 0否 1是
	IsVerifyAccount     int8                       `gorm:"column:is_verify_account" json:"isVerifyAccount"`         //是否验号: 0否 1是
	TimeInterval        int8                       `gorm:"column:time_interval" json:"timeInterval"`                //定时发布任务: 0否 1是
	TimeIntervalSetting []*TimeIntervalSettingItem `gorm:"column:time_interval_setting" json:"timeIntervalSetting"` //定时发布配置
	Postage             float64                    `json:"postage" `                                                //邮费
	TaskMoney           decimal.Decimal            `json:"taskMoney" `                                              //总本金
	Brokerage           decimal.Decimal            `json:"brokerage" `                                              //总佣金
	TaskNum             int                        `json:"taskNum" `                                                //总单量,自动计算
	PlanDraftsId        int64                      `json:"planDraftsId" `                                           //草稿箱id
}
